package com.datastructure.test.evalRPN;

import java.util.List;
import java.util.Stack;

public class EvalRPN {

    public static void main(String[] args) {
        EvalRPN evalRPN = new EvalRPN();
        String[] ls = {"2","1","+","4","*"};
        int calculate = evalRPN.calculate(ls);
        System.out.println(calculate);
    }

    public int calculate(String[] tokens){
        // 创建栈
        Stack<String> stack = new Stack<>();
        // 遍历ls
        for(String item: tokens){
            // 这里使用正则表达式来取出数
            if(item.matches("\\d+")){ // 匹配的是多位数
                // 入栈
                stack.push(item);
            } else {
                // pop出两个数，并运算，再入栈
                int num2 = Integer.parseInt(stack.pop());
                int num1 = Integer.parseInt(stack.pop());
                int res = 0;
                if(item.equals("+")){
                    res = num1 + num2;
                } else if(item.equals("-")) {
                    res = num1 - num2;
                } else if(item.equals("*")) {
                    res = num1 * num2;
                } else if(item.equals("/")) {
                    res = num1 / num2;
                } else {
                    stack.push(Integer.parseInt(item)+"");
                }
                // 把res入栈
                stack.push("" + res);
            }
        }
        // 最后留在stack中的数据是运算结果
        return Integer.parseInt(stack.pop());
    }
}
